<?php

namespace Game\Core;

use Game\Helper\Log;
use Game\Helper\ElapsedTime;

use Game\Helper\MatchCalc;

class Match
{

    /**
     * Configuração da partatida
     * @TODO Criar uma entidade e tambem fazer buscas de arquivo de configuração.
     */
    protected $config;

    /**
     * Configuração da partatida
     * @TODO Criar uma entidade e tambem fazer buscas de arquivo de configuração.
     */
    protected $calc;

	/**
	 * Array com as partidas para calcular
	 */
	protected $matchs;

	/**
	 * Pasta para partidas prestes a começar
	 */
	protected $dir_play;

    /**
     * @param $matchs Array Lista com nome dos aquivos
     * @param $dir_play String Caminho dos arquivos de partida
     */
	public function __construct(array $matchs, $dir_play) {
		$this->matchs = $matchs;
		$this->dir_play = $dir_play;
        $this->calc = new MatchCalc();

        $this->config = array(
            'time' => 600,//Quando tempo durara o primiero e o segundo tempo 10minutos cada tempo
            'break_time' => 180,//Quando tempo durara o intervalo 3 minutos de intervalo
            'turn' => 10,//Quantidade de turnos equivale aos minutos do jogo.
            'rate' => 1.5//Configuração de ganho de exp
        );
	}

    /**
     * Partida
     */
    public function play() {
        $elapsedTime = new ElapsedTime();

        $elapsedTime->start();

        for ($i=0; $i < $this->config['turn']; $i++) {
            foreach ($this->matchs as $m) {
                $match = $this->getMatchData($m);

                $this->calc->calc($match, $i);

                # === Salva partida
                $this->saveMatchData($match);
            }

            //sleep(round($this->config['time']/$this->config['turn']));
        }
        $elapsedTime->end();

        echo $elapsedTime->show();
    }

    /**
     * Abre o arquivo de partida e retorna um array
     * @param $match String Nome do arquivo da partida
     * @return Array
     */
    protected function getMatchData($match) {
        $file = file( $this->dir_play . $match );
        $maxLines = count($file);

        return json_decode($file[$maxLines - 1], true);
    }

    /**
     * Salva array em json no arquivo da partida
     * @param $data Array Array com os dados para
     */
    protected function saveMatchData(array $data) {
        unlink($this->dir_play . $data['match'] . ".match");

        $fp = fopen( $this->dir_play . $data['match'] . ".match", "a");
        fwrite($fp, "\n".json_encode($data));
        fclose($fp);
        Log::createLog("Salvo dados da patida: ". $data['match']);
    }
}
